{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "89e95299be2a20bb",
   "metadata": {},
   "source": [
    "# 星座运势API课堂作业\n",
    "\n",
    "## 背景\n",
    "聚合数据(https://www.juhe.cn/)提供了一个星座运势API,可以获取不同星座的每日运势信息。本次作业要求你使用这个API创建一个简单的星座运势查询程序。\n",
    "\n",
    "## 任务描述\n",
    "1. 使用聚合数据的星座运势API创建一个程序,允许用户输入星座名称和日期,然后显示该星座当天的运势信息。\n",
    "\n",
    "2. 你的程序应该至少显示以下信息:\n",
    "   - 星座名称\n",
    "   - 日期\n",
    "   - 综合指数\n",
    "   - 幸运色\n",
    "   - 幸运数字\n",
    "   - 速配星座\n",
    "   - 今日概述\n",
    "\n",
    "3. 为了增加趣味性,根据\"综合指数\"的值(0-100),用不同的表情符号来表示当天的整体运势:\n",
    "   - 90-100: 😁 (非常好)\n",
    "   - 80-89: 😊 (很好)\n",
    "   - 70-79: 🙂 (好)\n",
    "   - 60-69: 😐 (一般)\n",
    "   - 0-59: 😕 (不太好)\n",
    "\n",
    "4. 处理可能出现的错误,例如:\n",
    "   - 用户输入了错误的星座名称\n",
    "   - API请求失败\n",
    "   - 返回的数据格式不正确\n",
    "\n",
    "## 输出示例\n",
    "```\n",
    "请输入星座名称: 狮子座\n",
    "请输入日期 (YYYYMMDD): 20240627\n",
    "\n",
    "======= 狮子座运势 (2024年06月27日) =======\n",
    "今日运势: 😊 (89分)\n",
    "幸运色: 古铜色\n",
    "幸运数字: 8\n",
    "速配星座: 处女座\n",
    "\n",
    "今日概述: \n",
    "有些思考的小漩涡，可能让你忽然的放空，生活中许多的细节让你感触良多，五味杂陈， \n",
    "常常有时候就慢动作定格，想法在某处冻结停留，陷入一阵自我对话的沉思之中，这个时候你不喜欢被打扰 \n",
    "或询问，也不想让某些想法曝光，个性变得有些隐晦。\n",
    "```\n",
    "\n",
    "## 提示\n",
    "- 在使用API之前,请先阅读聚合数据的API文档,了解如何正确发送请求和解析返回的JSON数据。\n",
    "- 考虑使用Python的`requests`库来发送HTTP请求,使用`json`库来解析返回的JSON数据。\n",
    "- 记得处理可能出现的异常情况,提供友好的错误提示。\n",
    "\n",
    "## 扩展任务 (选做)\n",
    "如果你完成了基本任务,可以尝试以下扩展:\n",
    "1. 允许用户查询一周的运势,并用图表展示各项指数的变化趋势。\n",
    "2. 将查询结果保存到文件中,允许用户查看历史记录。\n",
    "\n",
    "祝你编程愉快！"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6a0ced42-7bbd-4a24-8d80-0898b2b99c64",
   "metadata": {},
   "source": [
    "# 百度翻译API课堂作业\n",
    "\n",
    "## 背景\n",
    "百度翻译提供了一个API，允许开发者进行文本翻译。本次作业要求你使用这个API创建一个简单的翻译程序。\n",
    "\n",
    "## 任务描述\n",
    "1. 使用百度翻译API创建一个程序，允许用户输入文本，然后显示可能的翻译结果。\n",
    "\n",
    "2. API详情:\n",
    "   - 请求URL: https://fanyi.baidu.com/sug\n",
    "   - 请求方法: POST\n",
    "   - 请求参数: \n",
    "     - kw: 要翻译的文本\n",
    "     - from: 源语言 (使用 'auto' 进行自动检测)\n",
    "     - to: 目标语言 (使用 'zh' 表示中文)\n",
    "\n",
    "3. 你的程序应该完成以下任务:\n",
    "   - 提示用户输入要翻译的文本\n",
    "   - 使用正确的参数发送POST请求到API\n",
    "   - 解析返回的JSON数据\n",
    "   - 以易读的格式在控制台显示所有可能的翻译结果\n",
    "\n",
    "4. 处理可能出现的错误，例如:\n",
    "   - API请求失败\n",
    "   - 返回的数据格式不正确\n",
    "   - 没有找到翻译结果\n",
    "\n",
    "## 输出示例\n",
    "```\n",
    "请输入要翻译的文本: hello\n",
    "\n",
    "翻译结果:\n",
    "1. 你好\n",
    "2. 喂\n",
    "3. 哈罗\n",
    "\n",
    "请输入要翻译的文本: \n",
    "```\n",
    "\n",
    "## 提示\n",
    "- 使用Python的`requests`库来发送HTTP请求。\n",
    "- 使用`json`库来解析返回的JSON数据。\n",
    "- 仔细检查API返回的数据结构，确保正确提取翻译结果。\n",
    "- 考虑使用异常处理来应对可能的错误情况。\n",
    "- 使用循环来允许用户连续输入多个翻译请求，直到用户选择退出程序。\n",
    "\n",
    "## 扩展任务 (选做)\n",
    "如果你完成了基本任务，可以尝试以下扩展:\n",
    "1. 允许用户选择目标语言（不只限于中文）。\n",
    "2. 将翻译历史保存到文本文件中，允许用户查看过去的翻译记录。\n",
    "3. 实现双向翻译功能（例如，既可以从英文翻译到中文，也可以从中文翻译到英文）。\n",
    "4. 添加一个简单的菜单系统，允许用户选择不同的操作（如翻译、查看历史、切换语言等）。\n",
    "\n",
    "祝你编程愉快！"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "797f9772-f45a-425b-aedf-35ca45daee99",
   "metadata": {},
   "source": [
    "# 短信信息提取正则表达式作业\n",
    "\n",
    "## 背景\n",
    "在日常生活中，我们经常收到各种短信，其中验证码短信和快递通知短信尤为重要。本次作业要求你使用正则表达式来自动识别短信类型并提取其中的关键信息。\n",
    "\n",
    "## 任务描述\n",
    "1. 编写一个程序，使用正则表达式来：\n",
    "   a) 自动识别输入的短信是验证码短信还是快递通知短信\n",
    "   b) 从验证码短信中提取验证码\n",
    "   c) 从快递通知短信中提取取件码\n",
    "\n",
    "2. 你的程序应该能够：\n",
    "   - 正确识别短信类型（验证码短信或快递通知）\n",
    "   - 提取相应的验证码或取件码\n",
    "   - 打印识别结果和提取的信息\n",
    "\n",
    "## 示例短信\n",
    "1. 验证码短信（来自百度）：\n",
    "   ```\n",
    "   【百度】您的验证码是：384952，有效期10分钟。请勿将验证码泄露给他人。\n",
    "   ```\n",
    "\n",
    "2. 快递通知短信（来自顺丰速递）：\n",
    "   ```\n",
    "   【顺丰速递】您的快递已到达【银河系第三街道第四号柜】，取件码为：8861，请及时领取。如有问题请联系派送员13800138000。\n",
    "   ```\n",
    "\n",
    "## 要求\n",
    "1. 编写一个函数，该函数接受一个字符串参数（短信内容），返回短信类型和提取的关键信息。\n",
    "2. 使用正则表达式来识别短信类型并提取验证码或取件码。\n",
    "3. 确保你的正则表达式能够处理不同长度的验证码和取件码。\n",
    "4. 考虑可能的变体，例如不同的标点符号或空格使用。\n",
    "\n",
    "## 输出示例\n",
    "```\n",
    "输入短信：【百度】您的验证码是：384952，有效期10分钟。请勿将验证码泄露给他人。\n",
    "识别结果：验证码短信\n",
    "提取信息：验证码 384952\n",
    "\n",
    "输入短信：【顺丰速递】您的快递已到达【银河系第三街道第四号柜】，取件码为：8861，请及时领取。如有问题请联系派送员13800138000。\n",
    "识别结果：快递通知短信\n",
    "提取信息：取件码 8861\n",
    "```\n",
    "\n",
    "## 提示\n",
    "- 使用Python的`re`模块来处理正则表达式。\n",
    "- 考虑使用原始字符串（r\"your_regex_here\"）来避免转义字符的问题。\n",
    "- 测试你的正则表达式，确保它们能处理各种可能的情况。\n",
    "- 考虑使用命名捕获组来使你的正则表达式更易读和维护。\n",
    "\n",
    "## 扩展任务（选做）\n",
    "1. 扩展你的程序，使其能处理更多类型的短信，如银行交易通知或者机票信息。\n",
    "2. 尝试处理更复杂的情况，比如一条短信中包含多个验证码或取件码。\n",
    "3. 实现一个简单的短信归类系统，能够处理一批短信并生成分类报告。\n",
    "\n",
    "祝你编程愉快！"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "07344b4a-da34-4572-92c7-72694fbe7362",
   "metadata": {},
   "source": [
    "# 豆瓣电影评论爬虫作业\n",
    "\n",
    "## 背景\n",
    "豆瓣电影是一个广受欢迎的电影评论平台。本次作业要求你编写一个Python程序，爬取电影\"肖申克的救赎\"的所有评论，并将这些评论保存到CSV文件中。\n",
    "\n",
    "## 任务描述\n",
    "1. 编写一个Python程序，爬取豆瓣电影\"肖申克的救赎\"的所有评论。\n",
    "2. 将爬取的评论数据保存到CSV文件中。\n",
    "\n",
    "## 具体要求\n",
    "1. 使用Python的requests库发送HTTP请求获取网页内容。\n",
    "2. 使用Beautiful Soup或XPATH库解析HTML内容，提取评论数据。\n",
    "3. 处理分页，确保爬取所有页面的评论。\n",
    "4. 对于每条评论，至少爬取以下信息：\n",
    "   - 评论者的用户名\n",
    "   - 评论内容\n",
    "   - 评分（如果有）\n",
    "   - 评论时间\n",
    "5. 将爬取的数据保存到CSV文件中，每行代表一条评论，列包括上述信息。\n",
    "6. 实现错误处理和异常捕获，确保程序的稳定性。\n",
    "7. 遵守网站的robots.txt规则和爬虫礼仪，控制爬取速度，避免对目标网站造成压力。\n",
    "\n",
    "## 提示\n",
    "- 豆瓣电影\"肖申克的救赎\"的URL：https://movie.douban.com/subject/1292052/\n",
    "- 使用Python的csv模块来写入CSV文件。\n",
    "- 考虑使用随机延时来控制爬取速度，避免被网站封禁。\n",
    "- 注意处理可能出现的编码问题，确保中文字符能够正确保存。\n",
    "- 可能需要处理反爬虫机制，如设置适当的User-Agent头部。\n",
    "\n",
    "## 输出示例\n",
    "你的CSV文件应该类似于以下格式：\n",
    "\n",
    "```\n",
    "用户名,评分,评论时间,评论内容\n",
    "用户A,5,2023-01-01,\"这是一部经典电影，情节扣人心弦...\"\n",
    "用户B,4,2023-01-02,\"虽然有些情节略显夸张，但整体很棒...\"\n",
    "...\n",
    "```\n",
    "\n",
    "## 注意事项\n",
    "- 确保你的爬虫程序遵守豆瓣的使用条款和规定。\n",
    "- 不要过于频繁地发送请求，这可能会导致你的IP被暂时或永久封禁。\n",
    "- 考虑使用会话（Session）来维持连接，这可能会提高效率并减少被检测为爬虫的可能性。\n",
    "\n",
    "## 扩展任务（选做）\n",
    "1. 实现多线程爬取以提高效率（但要小心控制并发数量）。\n",
    "2. 添加命令行参数，允许用户指定要爬取的电影ID和输出文件名。\n",
    "3. 对爬取的评论进行简单的数据分析，如计算平均评分、生成词云等。\n",
    "4. 实现断点续爬功能，允许程序在中断后从上次爬取的位置继续。\n",
    "\n",
    "祝你编程愉快！记住，网络爬虫应该负责任地使用，尊重网站所有者和其他用户的权益。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "67c402ca-80a8-4cd3-8c19-4ed0b01846ea",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
